from django.db import models
import uuid
import re
import time
# Create your models here.
"""
Django 数据库迁移命令: 
python manage.py makemigrations
python manage.py migrate
"""

# 用户表
"""
用户表
以后JianDan产品下如果需要用户,都必须把用户注册到该表中,如果需要查询也是从这个表查询
platform 注册平台
100 为JianDan
"""
class users(models.Model):
    user_id = models.CharField(max_length=100, verbose_name="用户ID", unique=True, primary_key=True)
    account = models.CharField(max_length=40, verbose_name="账号")
    password = models.CharField(max_length=40, verbose_name="密码")
    platform = models.IntegerField(verbose_name="注册平台")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    def save(self, *args, **kwargs):
        # platform 必须是数字
        if not isinstance(self.platform, int):
            raise ValueError("平台必须是数字")
        # 判断平台相同下的账号是否相同
        if users.objects.filter(platform=self.platform, account=self.account).exists():
            # 判断是不是编辑
            if self.user_id:
                pass
            else:
                raise ValueError("账号已存在")
        # 密码长度至少6位到40位
        if len(self.password) < 6 or len(self.password) > 40:
            raise ValueError("密码长度至少6位到40位")
        # 密码只能包含字母、数字、@符号和下划线
        if not re.match(r'^[a-zA-Z0-9@_]+$', self.password):
            raise ValueError("密码只能包含字母、数字、@符号和下划线")
        # 账号长度至少6位到40位
        if len(self.account) < 6 or len(self.account) > 40:
            raise ValueError("账号长度至少6位到40位")
        # 账号只能包含数字
        if not re.match(r'^[0-9]+$', self.account):
            raise ValueError("账号只能包含数字")
        # 只在创建新用户时生成 user_id
        if not self.user_id:
           # 生成用户ID
           new_user_id = str(uuid.uuid4()) + str(time.strftime("%Y%m%d%H%M%S")) + str(self.platform)
           # 判断用户ID是否已存在
           if users.objects.filter(user_id=new_user_id).exists():
               raise ValueError("请重新尝试一次")
           self.user_id = new_user_id
        super().save(*args, **kwargs)
